package com.fivefu.core.camera.services;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fivefu.core.camera.entity.DbMonitorRegion;
import com.baomidou.mybatisplus.extension.service.IService;
import com.fivefu.core.camera.vo.response.ProPageList;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 自定义探头组织 服务类
 * </p>
 *
 * @author 
 * @since 2022-09-27 15:14:41
 */
public interface DbMonitorRegionService extends IService<DbMonitorRegion> {

    /**
     * 根据组织名称和层级查询相关信息
     * @param regionName   组织名称
     * @param pid          父级组织编号
     * @param id           组织编号
     * @return
     */
    DbMonitorRegion queryMonitorRegionByRegionName(String regionName,Long pid,Long id);

    /**
     * 编辑文件夹
     * @param regionName 组织名称
     * @param parentRegionId 父级组织编号
     * @param id 组织编号
     * @param userid 操作用户编号
     */
    Long editMonitorRegion(String regionName, Long parentRegionId, Long id, String userid);

    /**
     * 文件夹下添加相关探头信息
     * @param id 文件id
     * @param cameraCodes 探头id（多个探头id用逗号隔开）
     * @param userid 操作用户编号
     */
    void addMonitorRegionCameras(Long id, String cameraCodes, String userid);

    /**
     * 查询自定义探头组织表中所有数据集
     * @return
     */
    List<DbMonitorRegion> queryMonitorRegionAllList();

    /**
     * 移除文件夹下探头
     * @param regionId       组织编号
     * @param cameraCode     探头id
     * @param userid         用户编号
     */
    void removeMonitorRegionCamera(Long regionId,String cameraCode, String userid);

    /**
     * 删除文件夹
     * @param regionId     组织编号
     * @param userid       用户编号
     */
    void deleteMonitorRegion(Long regionId, String userid);

    /**
     * 新增文件夹下探头列表查询
     * @param cameraName           探头名称(模糊)
     * @param cameraCode           探头编号(模糊)
     * @param cameraAreaid         所属区域
     * @param cameraStreetid 所属街道
     * @param cameraManufacturer   厂商
     * @param cameraStatus         探头状态
     * @param page                 当前页
     * @param limit                每页显示条数
     * @param id                   探头组织编号
     * @return
     */
    Page<ProPageList> queryCameraList(String cameraName, String cameraCode, String cameraAreaid, String cameraStreetid,String cameraManufacturer,
                                      String cameraStatus, String onlineStatus,Integer page, Integer limit, Long id);

    /**
     * 查看探头源数据详情信息
     * @param id    探头id
     * @param code  探头唯一编码
     * @return
     */
    Map<String, Object> getOriginalDetails(String id,String code);

    /**
     * 查看探头基础数据详情信息
     * @param id   探头id
     * @return
     */
    Map<String, Object> getBasisDetails(Long id);

    /**
     * 根据探头编号查询视频播放地址/场景图片
     * @param id            探头id
     * @param type          查询类型(1:视频播放地址，2:场景图片)
     * @param protocal      取流协议(共同协议：rtsp,rtmp,hls,海康额外有：hik,ws,大华额外有：FLV_HTTP)
     * @param subType       码流类型(0:主码流,1:辅流1,2:辅流2。默认为0主码流)只有大华有
     * @return
     */
    Map<String, Object> getCameraVideoUrl(Long id,Integer type,String protocal,String subType) throws Exception;

    /**
     * 视频截图
     * @param id     探头编号
     * @param url    视频播放地址url
     * @return
     * @throws Exception
     */
    Map<String,Object> screenshots(Long id,String url) throws Exception;

    /**
     * 查看探头历史切片
     * @param id  探头id
     * @param stime 开始时间(yyyyMMddHHmmss)
     * @param etime 结束时间(yyyyMMddHHmmss)
     * @param pageNo 页码
     * @param pageSize 数量
     * @return
     */
    Map<String, Object> getBasisDetailPicture(Long id, String stime, String etime, Integer pageNo, Integer pageSize);

    Map<String,Object> queryPlaybackURL(Long id, String stime, String etime, String scheme);
}
